#include"apue.h"
static int msgid_ctos;
static int msgid_stoc;
Msg_ctos msg_ctos1;
Msg_ctos msg_ctos2;
Msg_stoc msg_stoc;

void take_cli(void)
{
	char cli_path[255] = {};
 	sprintf(cli_path,"%s%u",ACCOUNT_PATH,msg_ctos1.m_cli.cliid);

	if(-1 == access(cli_path,F_OK))
	{
		sprintf(msg_stoc.m_str,"帐号：%d 不存在",msg_ctos1.m_cli.cliid);
		return;
	}

	int fd = open(cli_path,O_RDWR);
	if(-1 == fd)
	{
		perror("open");
		sprintf(msg_stoc.m_str,"服务器正在升级，请稍候...");
		return;
	}

	
	if(0 >= read(fd,&msg_ctos2.m_cli,sizeof(msg_ctos2.m_cli)))
	{
		perror("read");
		sprintf(msg_stoc.m_str,"服务器正在升级，请稍候...");
		return;
	}

	if(0 != strcmp(msg_ctos2.m_cli.passwd,msg_ctos1.m_cli.passwd))
	{
		sprintf(msg_stoc.m_str,"用户或密码错误...");
		return;
	}
	else
	{
		if(msg_ctos2.m_cli.money<msg_ctos1.m_cli.money)
		{
			strcpy(msg_stoc.m_str,"余额不足，取款失败！");
			return;
		}
		else
		{	

			msg_ctos2.m_cli.money-=msg_ctos1.m_cli.money;
			lseek(fd,SEEK_SET,0);
			if(write(fd,&msg_ctos2.m_cli,sizeof(msg_ctos2.m_cli))<=0)
			{
				perror("write");
			}
		}
	}
	sprintf(msg_stoc.m_str," 取款成功，余额：%g￥",msg_ctos2.m_cli.money);
	close(fd);
}

int main()
{
	msgid_ctos = get_ctos_msg();
	msgid_stoc = get_stoc_msg();

	while(1)
	{
		if(-1 == msgrcv(msgid_ctos,&msg_ctos1,sizeof(msg_ctos1),MTAKE,0))
		{
			perror("msgrcv");
		}
		
		take_cli();
		msg_stoc.m_type = msg_ctos1.m_pid;

		if(-1 == msgsnd(msgid_stoc,&msg_stoc,sizeof(msg_stoc.m_str),0))
		{
			perror("msgsnd");
		}
	}
}
